/*
 * Copyright 2008-2023 dexian.vip. All rights reserved.
 * Support: http://www.dexian.vip
 * License: http://www.dexian.vip/license
 */

package vip.dexian.admin.service;

import vip.dexian.admin.dto.RoleDepartmentDTO;
import vip.dexian.admin.entity.Role;
import vip.dexian.admin.entity.RoleDepartment;
import vip.dexian.core.base.service.BaseService;
import org.springframework.scheduling.annotation.Async;

import java.util.List;

/**
 * 角色->部门业务逻辑操作
 *
 * @author 挺好的 2023年06月08日 11:04:58
 */
public interface RoleDepartmentService extends BaseService <RoleDepartment, RoleDepartmentDTO, Long> {

    /**
     * 保存角色对应的部门
     *
     * @param departments
     *         角色对应的部门
     */
    @Async
    void save (List <RoleDepartment> departments);

    /**
     * 根据角色id删除部门
     *
     * @param roleId
     *         角色id
     *
     * @return 删除成功的数量
     */
    int deleteByRoleId (Long roleId);

    /**
     * 根据角色id查找部门
     *
     * @param roleId
     *         角色id
     *
     * @return {@link vip.dexian.admin.dto.RoleDepartmentDTO}
     */
    List <RoleDepartmentDTO> findByRoleId (Long roleId);

    /**
     * 创建角色->部门对象
     *
     * @param departmentIds
     *         部门id
     * @param role
     *         关联的角色
     *
     * @return 如果 部门id 或者 role 为null，则返回empty list
     */
    List <RoleDepartment> create (List <Long> departmentIds, Role role);

    /**
     * 根据角色id查找关联的部门
     *
     * @param roleIds
     *         角色id
     *
     * @return 部门id列表
     */
    List <Long> findDepartmentIds (List <Long> roleIds);

}
